<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
	/**
	* Zmienna przechowywujaca obiekt config z pliku application.ini
	* @var Array
	**/
	protected $config = null;
	
	/**
	* Uruchomienie autoloadera dla bibliotek.
	**/ 
	protected function _initAutoload() {
		$moduleLoader = new Zend_Application_Module_Autoloader(array(
			'namespace' => '',
			'basePath' => APPLICATION_PATH
		));
		
		return $moduleLoader;
	}
	
	/**
	* Ustawienie sciezek do katalogów konkretnych modułów
	**/
	protected function _initRequest() {
		$this->bootstrap('FrontController');
		// Przechwycenie front controllera z rejestru bootstrap
		$front = $this->getResource('FrontController');
		
		$front->setControllerDirectory(array(
			'default' => './application/modules/default/controllers',
			'admin' => './application/modules/admin/controllers',
		));
		
		//Zend_Layout::startMvc('./application/views/layouts');
	}
	
	/**
	* Inicjalizacja applikacji, zaladowanie odpowiednich ustawien itp.
	**/
	protected function _initApplication() {
		// Pobieranie danych z pliku konfiguracyjnego (zaladowanego przez Bootstrap) i dodanie ich do rejestru
		$this->config = $this->getOptions();
		Zend_Registry::set('config', $this->config);
	}
	
	/**
	* Inicjalizacja ORM'a Doctrine.
	**/
	public function _initDoctrine() {
		require_once 'Doctrine.php';
		$loader = Zend_Loader_Autoloader::getInstance();
		$loader->pushAutoloader(array('Doctrine', 'autoload'));
		
	
		// Pobranie ustawien z sekcji 'doctrine.' z pliku application.ini
		$doctrineConfig = $this->getOption('doctrine');
		
		// Utworzenie instancji managera doctrine i ustawienie niezbędnych opcji
		$manager = Doctrine_Manager::getInstance();
		$manager->setAttribute(
		Doctrine::ATTR_MODEL_LOADING,
		Doctrine::MODEL_LOADING_CONSERVATIVE);

/*
  		$servers = array(
            'host' => 'localhost',
            'port' => 11211,
            'persistent' => true
        );
 
 
        $cacheDriver = new Doctrine_Cache_Memcache(array(
            'servers' => $servers,
            'compression' => false
            )
        );

		$manager->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver);
		$manager->setAttribute(Doctrine::ATTR_RESULT_CACHE_LIFESPAN, 10);
*/

		// Add models and generated base classes to Doctrine autoloader
		Doctrine::loadModels($doctrineConfig['models_path']);
		
		// Pobranie ustawien z sekcji 'database.' z pliku application.ini
		$config = $this->getOption('database');
		
		$data = Core_Class_ArrayObject::array2object($config);
		$string = (string)$data->type."://".$data->username.":".$data->password."@".$data->host."/".$data->dbname;
		$db_url = str_replace("'", "", $string);
		$manager->openConnection($db_url);
		return $manager;
	}

}
